
<!doctype html>
<html lang="en" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
      
      
      
        <link rel="prev" href="../flexmi/">
      
      
        <link rel="next" href="../exeed/">
      
      <link rel="icon" href="../../assets/images/favicon.png">
      <meta name="generator" content="mkdocs-1.4.3, mkdocs-material-9.1.19">
    
    
      
        <title>Eugenia - Epsilon</title>
      
    
    
      <link rel="stylesheet" href="../../assets/stylesheets/main.eebd395e.min.css">
      
        
        <link rel="stylesheet" href="../../assets/stylesheets/palette.ecc896b0.min.css">
      
      

    
    
    
      
        
        
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
        <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
      
    
    
      <link rel="stylesheet" href="../../assets/stylesheets/mermaid.css">
    
      <link rel="stylesheet" href="../../assets/javascript/google-code-prettify/prettify.css">
    
      <link rel="stylesheet" href="https://unpkg.com/mermaid@8.5.1/dist/mermaid.css">
    
      <link rel="stylesheet" href="../../assets/stylesheets/slick.css">
    
      <link rel="stylesheet" href="../../assets/stylesheets/slick-theme.css">
    
      <link rel="stylesheet" href="../../assets/stylesheets/extra.css">
    
    <script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
    
      
<script>
  window.ga = window.ga || function() {
    (ga.q = ga.q || []).push(arguments)
  }
  ga.l = +new Date
  /* Setup integration and send page view */
  ga("create", "UA-184785655-1", "auto")
  ga("set", "anonymizeIp", true)
  ga("send", "pageview")
  /* Register handler to log search on blur */
  document.addEventListener("DOMContentLoaded", () => {
    if (document.forms.search) {
      var query = document.forms.search.query
      query.addEventListener("blur", function() {
        if (this.value) {
          var path = document.location.pathname;
          ga("send", "pageview", path + "?q=" + this.value)
        }
      })
    }
  })
</script>
<script async src="https://www.google-analytics.com/analytics.js"></script>
    
    
    
  </head>
  
  
    
    
    
    
    
    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="black" data-md-color-accent="orange">
  
    
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#graphical-model-editor-development-with-eugeniagmf" class="md-skip">
          Skip to content
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
    
      

  

<header class="md-header md-header--shadow" data-md-component="header">
  <nav class="md-header__inner md-grid" aria-label="Header">
    <a href="../.." title="Epsilon" class="md-header__button md-logo" aria-label="Epsilon" data-md-component="logo">
      
  <img src="../../assets/images/epsilon-white-background.png" alt="logo">

    </a>
    <label class="md-header__button md-icon" for="__drawer">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
    </label>
    <div class="md-header__title" data-md-component="header-title">
      <div class="md-header__ellipsis">
        <div class="md-header__topic">
          <span class="md-ellipsis">
            Epsilon
          </span>
        </div>
        <div class="md-header__topic" data-md-component="header-topic">
          <span class="md-ellipsis">
            
              Eugenia
            
          </span>
        </div>
      </div>
    </div>
    
      
    
    
    
      <label class="md-header__button md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
      </label>
      <div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
      <label class="md-search__icon md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
      </label>
      <nav class="md-search__options" aria-label="Search">
        
        <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
        </button>
      </nav>
      
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            Initializing search
          </div>
          <ol class="md-search-result__list" role="presentation"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
      <div class="md-header__source">
        <a href="https://github.com/eclipse/epsilon" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  </div>
  <div class="md-source__repository">
    Epsilon @ GitHub
  </div>
</a>
      </div>
    
  </nav>
  
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
          
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              
              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    


<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href="../.." title="Epsilon" class="md-nav__button md-logo" aria-label="Epsilon" data-md-component="logo">
      
  <img src="../../assets/images/epsilon-white-background.png" alt="logo">

    </a>
    Epsilon
  </label>
  
    <div class="md-nav__source">
      <a href="https://github.com/eclipse/epsilon" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
  </div>
  <div class="md-source__repository">
    Epsilon @ GitHub
  </div>
</a>
    </div>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../.." class="md-nav__link">
        Home
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../../getting-started/" class="md-nav__link">
        Getting Started
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../../playground" class="md-nav__link">
        Playground
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../../download/" class="md-nav__link">
        Download
      </a>
    </li>
  

    
      
      
      

  
  
    
  
  
    
    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" checked>
      
      
      
        <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
          Documentation
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="true">
        <label class="md-nav__title" for="__nav_5">
          <span class="md-nav__icon md-icon"></span>
          Documentation
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../" class="md-nav__link">
        Overview
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../emc/" class="md-nav__link">
        Model Connectivity
      </a>
    </li>
  

            
          
            
              
  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_3" >
      
      
      
        <label class="md-nav__link" for="__nav_5_3" id="__nav_5_3_label" tabindex="0">
          Languages
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_5_3">
          <span class="md-nav__icon md-icon"></span>
          Languages
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../eol/" class="md-nav__link">
        Object Language (EOL)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../egl/" class="md-nav__link">
        Code Generation (EGL)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../egx/" class="md-nav__link">
        Code Generation (EGX)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../evl/" class="md-nav__link">
        Model Validation (EVL)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../etl/" class="md-nav__link">
        Model Transformation (ETL)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../ecl/" class="md-nav__link">
        Model Comparison (ECL)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../eml/" class="md-nav__link">
        Model Merging (EML)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../epl/" class="md-nav__link">
        Pattern Matching (EPL)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../flock/" class="md-nav__link">
        Model Migration (Flock)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../emg/" class="md-nav__link">
        Model Generation (EMG)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../eunit/" class="md-nav__link">
        Unit Testing (EUnit)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../pinset/" class="md-nav__link">
        Dataset Extraction (Pinset)
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../ewl/" class="md-nav__link">
        Wizard Language (EWL)
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

            
          
            
              
  
  
    
  
  
    
    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_4" checked>
      
      
      
        <label class="md-nav__link" for="__nav_5_4" id="__nav_5_4_label" tabindex="0">
          Tools
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_4_label" aria-expanded="true">
        <label class="md-nav__title" for="__nav_5_4">
          <span class="md-nav__icon md-icon"></span>
          Tools
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../picto/" class="md-nav__link">
        Picto
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../flexmi/" class="md-nav__link">
        Flexmi
      </a>
    </li>
  

            
          
            
              
  
  
    
  
  
    <li class="md-nav__item md-nav__item--active">
      
      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
      
      
        
      
      
        <label class="md-nav__link md-nav__link--active" for="__toc">
          Eugenia
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <a href="./" class="md-nav__link md-nav__link--active">
        Eugenia
      </a>
      
        

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#the-filesystem-metamodel" class="md-nav__link">
    The Filesystem metamodel
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#the-generated-editor" class="md-nav__link">
    The generated editor
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#supported-annotations" class="md-nav__link">
    Supported Annotations
  </a>
  
    <nav class="md-nav" aria-label="Supported Annotations">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#gmf" class="md-nav__link">
    gmf
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmfdiagram" class="md-nav__link">
    gmf.diagram
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmfnode" class="md-nav__link">
    gmf.node
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmflink" class="md-nav__link">
    gmf.link
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmflink-for-eclass" class="md-nav__link">
    gmf.link (for EClass)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmflink-for-non-containment-ereference" class="md-nav__link">
    gmf.link (for non-containment EReference)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmfcompartment-for-containment-ereference" class="md-nav__link">
    gmf.compartment (for containment EReference)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmfaffixed-for-containment-ereference" class="md-nav__link">
    gmf.affixed (for containment EReference)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmflabel-for-eattribute" class="md-nav__link">
    gmf.label (for EAttribute)
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#installing-eugenia" class="md-nav__link">
    Installing Eugenia
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#running-eugenia" class="md-nav__link">
    Running Eugenia
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#re-running-eugenia" class="md-nav__link">
    Re-running Eugenia
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#troubleshooting" class="md-nav__link">
    Troubleshooting
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#recipes" class="md-nav__link">
    Recipes
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#customizing-your-editor" class="md-nav__link">
    Customizing your editor
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#adding-copyright" class="md-nav__link">
    Adding Copyright
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#next-steps" class="md-nav__link">
    Next Steps
  </a>
  
</li>
      
    </ul>
  
</nav>
      
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../exeed/" class="md-nav__link">
        Exeed
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../modelink/" class="md-nav__link">
        Modelink
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../hutn/" class="md-nav__link">
        HUTN
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../workflow/" class="md-nav__link">
        Workflow (Ant tasks)
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../articles/" class="md-nav__link">
        Articles
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../../examples/" class="md-nav__link">
        Examples
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://www.youtube.com/epsilondevs" class="md-nav__link">
        Screencasts
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://www.youtube.com/playlist?list=PLRwHao6Ue0YUecg7vEUQTrtySIWwrd_mI" class="md-nav__link">
        Lectures
      </a>
    </li>
  

            
          
            
              
  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5_9" >
      
      
      
        <label class="md-nav__link" for="__nav_5_9" id="__nav_5_9_label" tabindex="0">
          Javadoc
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_9_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_5_9">
          <span class="md-nav__icon md-icon"></span>
          Javadoc
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://download.eclipse.org/epsilon/stable-javadoc/" class="md-nav__link">
        Stable
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://download.eclipse.org/epsilon/interim-javadoc/" class="md-nav__link">
        Interim
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
      
      
      
        <label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
          Issues
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_6">
          <span class="md-nav__icon md-icon"></span>
          Issues
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://github.com/eclipse/epsilon/issues/new/choose" class="md-nav__link">
        Report a new issue
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://github.com/eclipse/epsilon/issues" class="md-nav__link">
        View open issues
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://bugs.eclipse.org/bugs/buglist.cgi?product=epsilon&cmdtype=doit&order=Reuse+same+sort+as+last+time" class="md-nav__link">
        Bugzilla (legacy)
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" >
      
      
      
        <label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
          Community
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_7">
          <span class="md-nav__icon md-icon"></span>
          Community
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_1" >
      
      
      
        <label class="md-nav__link" for="__nav_7_1" id="__nav_7_1_label" tabindex="0">
          Who is using Epsilon?
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_1_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_7_1">
          <span class="md-nav__icon md-icon"></span>
          Who is using Epsilon?
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../../users/" class="md-nav__link">
        Industry
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../../users/education/" class="md-nav__link">
        Education
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../../users/open-source/" class="md-nav__link">
        Open-source Projects
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://projects.eclipse.org/projects/modeling.epsilon/who" class="md-nav__link">
        Who is developing Epsilon?
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://ko-fi.com/eclipseepsilon" class="md-nav__link">
        How can I support Epsilon?
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://www.eclipse.org/forums/index.php/f/22/" class="md-nav__link">
        Forum
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../../professional-services" class="md-nav__link">
        Professional Services
      </a>
    </li>
  

            
          
            
              
  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7_6" >
      
      
      
        <label class="md-nav__link" for="__nav_7_6" id="__nav_7_6_label" tabindex="0">
          Social Media
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_7_6_label" aria-expanded="false">
        <label class="md-nav__title" for="__nav_7_6">
          <span class="md-nav__icon md-icon"></span>
          Social Media
        </label>
        <ul class="md-nav__list" data-md-scrollfix>
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://twitter.com/eclipseepsilon" class="md-nav__link">
        Twitter
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="https://youtube.com/epsilondevs" class="md-nav__link">
        YouTube
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../../labs/" class="md-nav__link">
        Epsilon Labs
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../../faq/" class="md-nav__link">
        Frequently Asked Questions
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../../branding/" class="md-nav__link">
        Branding
      </a>
    </li>
  

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              
              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#the-filesystem-metamodel" class="md-nav__link">
    The Filesystem metamodel
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#the-generated-editor" class="md-nav__link">
    The generated editor
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#supported-annotations" class="md-nav__link">
    Supported Annotations
  </a>
  
    <nav class="md-nav" aria-label="Supported Annotations">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#gmf" class="md-nav__link">
    gmf
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmfdiagram" class="md-nav__link">
    gmf.diagram
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmfnode" class="md-nav__link">
    gmf.node
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmflink" class="md-nav__link">
    gmf.link
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmflink-for-eclass" class="md-nav__link">
    gmf.link (for EClass)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmflink-for-non-containment-ereference" class="md-nav__link">
    gmf.link (for non-containment EReference)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmfcompartment-for-containment-ereference" class="md-nav__link">
    gmf.compartment (for containment EReference)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmfaffixed-for-containment-ereference" class="md-nav__link">
    gmf.affixed (for containment EReference)
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#gmflabel-for-eattribute" class="md-nav__link">
    gmf.label (for EAttribute)
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#installing-eugenia" class="md-nav__link">
    Installing Eugenia
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#running-eugenia" class="md-nav__link">
    Running Eugenia
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#re-running-eugenia" class="md-nav__link">
    Re-running Eugenia
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#troubleshooting" class="md-nav__link">
    Troubleshooting
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#recipes" class="md-nav__link">
    Recipes
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#customizing-your-editor" class="md-nav__link">
    Customizing your editor
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#adding-copyright" class="md-nav__link">
    Adding Copyright
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#next-steps" class="md-nav__link">
    Next Steps
  </a>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          
            <div class="md-content" data-md-component="content">
              <article class="md-content__inner md-typeset">
                
                  

  
  


<h1 id="graphical-model-editor-development-with-eugeniagmf">Graphical Model Editor development with Eugenia/GMF<a class="headerlink" href="#graphical-model-editor-development-with-eugeniagmf" title="Permanent link">&para;</a></h1>
<div class="admonition warning">
<p class="admonition-title">Eugenia discontinued in Epsilon 2.5</p>
<p>Following the <a href="https://projects.eclipse.org/projects/modeling.gmf-tooling">archival of the GMF Tooling project</a>, Eugenia has been discontinued from version 2.5 onwards. While you can still use Eugenia with older versions of Epsilon, you may want to consider more actively-maintained tools such as <a href="https://eclipse.org/sirius">Eclipse Sirius</a> if you need to develop a graphical editor, or <a href="../picto">Picto</a> if you are only interested in producing read-only views from models.</p>
</div>
<p>Eugenia is a tool that simplifies the development of GMF-based graphical model editors by automatically generating the <code>.gmfgraph</code>, <code>.gmftool</code> and <code>.gmfmap</code> models needed by GMF editor from a single annotated Ecore metamodel. For example, from the following annotated EMF metamodel (expressed using Emfatic; an Ecore version is available <a href="https://github.com/eclipse/epsilon/tree/main/examples/org.eclipse.epsilon.eugenia.examples.filesystem/model/filesystem.ecore">here</a>) it can generate a fully functional GMF editor, a screenshot of which is displayed below.</p>
<h2 id="the-filesystem-metamodel">The Filesystem metamodel<a class="headerlink" href="#the-filesystem-metamodel" title="Permanent link">&para;</a></h2>
<pre class="prettyprint lang-emf"><code>@namespace(uri="filesystem", prefix="filesystem")
@gmf
package filesystem;

@gmf.diagram
class Filesystem {
    val Drive[*] drives;
    val Sync[*] syncs;
}

class Drive extends Folder {

}

class Folder extends File {
    @gmf.compartment
    val File[*] contents;
}

class Shortcut extends File {
    @gmf.link(target.decoration="arrow", style="dash")
    ref File target;
}

@gmf.link(source="source", target="target", style="dot", width="2")
class Sync {
    ref File source;
    ref File target;
}

@gmf.node(label = "name")
class File {
    attr String name;
}</code></pre>
<h2 id="the-generated-editor">The generated editor<a class="headerlink" href="#the-generated-editor" title="Permanent link">&para;</a></h2>
<p><img alt="" src="Filesystemscreenshot2.png" /></p>
<h2 id="supported-annotations">Supported Annotations<a class="headerlink" href="#supported-annotations" title="Permanent link">&para;</a></h2>
<p>Eugenia supports the following annotations on Ecore elements.</p>
<h3 id="gmf">gmf<a class="headerlink" href="#gmf" title="Permanent link">&para;</a></h3>
<p>Applies to the top <code>EPackage</code> only and denotes that GMF-related annotations are expected in its elements. This doesn't affect the forthcoming model transformations, only the Ecore validation process.</p>
<h3 id="gmfdiagram">gmf.diagram<a class="headerlink" href="#gmfdiagram" title="Permanent link">&para;</a></h3>
<p>Denotes the root object of the metamodel. Only one (non-abstract) <code>EClass</code> must be annotated as <code>gmf.diagram</code>. Accepts the following details:</p>
<ul>
<li><code>diagram.extension</code> (optional) : the file extension for the diagram file</li>
<li><code>model.extension</code> (optional) : the file extension for the domain model. To make the generated tree-based editor work with the same extension, you need to add an <code>@emf.gen(fileExtensions="model-file-extension")</code> annotation <code>to the root package</code> of your metamodel.</li>
<li><code>onefile</code> (optional) : a value of <code>true</code> specifies that the domain model and the diagram should be stored in the same file</li>
<li><code>rcp</code> (optional) : a value of <code>true</code> specifies that the editor is intended to be part of a RCP product (printing is disabled)</li>
<li><code>units</code> (optional) : the units for the diagram (e.g. <code>Pixels</code>)</li>
</ul>
<h3 id="gmfnode">gmf.node<a class="headerlink" href="#gmfnode" title="Permanent link">&para;</a></h3>
<p>Applies to an <code>EClass</code> and denotes that it should appear on the diagram as a node. Accepts the following details:</p>
<ul>
<li><code>border.color</code> (optional) : an RGB color that will be set as the node's border color.</li>
<li><code>border.style</code> (optional) : the style of the node's border. Can be set to <code>solid</code> (default), <code>dash</code> or <code>dot</code>.</li>
<li><code>border.width</code> (optional) : an integer that specifies the width of the node's border.</li>
<li><code>color</code> (optional) : an RGB color that will be set as the node's background color (e.g. <code>255,0,0</code>).</li>
<li><code>figure</code> (optional) : the figure that will represent the node. Can be set to <code>rectangle</code>, <code>ellipse</code>, <code>rounded</code> (default), <code>svg</code> (see <code>svg.uri</code>), <code>polygon</code> (see <code>polygon.x</code> and <code>polygon.y</code>) or the fully qualified name of a Java class that implements Figure.</li>
<li><code>label</code>: the name(s) of the <code>EAttribute</code>(s) of the <code>EClass</code>, the value(s) of which will be displayed as the label of the node. If <code>label.placement</code> is set to <code>none</code>, this detail is not required.</li>
<li><code>label.color</code> (optional, since 1.5.0) : an RGB color that will be set as the node's foreground color. Labels will have a fixed font of this color.</li>
<li><code>label.icon</code> (optional) : if set to <code>true</code> (default) a small icon appears on the left of the label.</li>
<li><code>label.parser</code> (optional) : indicates the unqualified name of the class that will parse the text entered by the user into the label. By default, a <a href="http://download.oracle.com/javase/6/docs/api/java/text/MessageFormat.html">MessageFormat</a>-based parser is generated, but it can be manually customized after generation.</li>
<li><code>label.edit.pattern</code> (optional) : like <code>label.pattern</code>, but only for editing the label.</li>
<li><code>label.pattern</code> (optional) : if more than one attributes are specified in the label, the format detail is necessary to show how their values will be rendered in the label. The format follows the Java Message Format style (e.g. <code>{0} : {1}</code>). The same pattern is used for editing and viewing the label.</li>
<li><code>label.view.pattern</code> (optional) : like <code>label.pattern</code>, but only for viewing the label.</li>
<li><code>label.placement</code> (optional) : defines the placement of the label in relation to the node. Can be set to <code>internal</code>, <code>external</code> or <code>none</code> (no label will be shown). ''(The default distance of an external label in GMF is 20pt which is a bit too far away for my taste. <a href="../articles/eugenia-affixed-nodes">Read more</a> about fixing this without changing the generated code every time)''.</li>
<li><code>label.text</code> (optional) : defines the default text to be used when the <code>EAttribute</code>(s) in <code>label</code> are not set. By default, it is set to the name of the <code>EClass</code>.</li>
<li><code>label.readOnly</code> (optional) : a value of <code>true</code> denotes that the label cannot be changed in the generated diagram editor.</li>
<li><code>margin</code> (optional) : inset margin (5 units by default) for the node.</li>
<li><code>phantom</code> (optional) : defines if the node is phantom (<code>true</code>/<code>false</code>). Phantom nodes are particularly useful in order to visualize containment references using links instead of spatial containment (<a href="../articles/eugenia-phantom-nodes">read more...</a>).</li>
<li><code>polygon.x</code> (when <code>figure</code> is set to <code>polygon</code>) : list of space-separated integers with the X coordinates of the polygon used as figure.</li>
<li><code>polygon.y</code> (when <code>figure</code> is set to <code>polygon</code>) : list of space-separated integers with the Y coordinates of the polygon used as figure.</li>
<li><code>resizable</code> (optional) : a value of <code>false</code> disables all the resize handles for the node</li>
<li><code>size</code> (optional) : a GMF dimension that will be used as the node's preferred size (e.g. <code>10,5</code>). Width is specified before height.</li>
<li><code>svg.uri</code> (when <code>figure</code> is set to <code>svg</code>) : URI of the <code>.svg</code> file to be used as figure for the node. For instance, <code>platform:/plugin/my.plugin/my.svg</code> will access the <code>my.svg</code> file in the <code>my.plugin</code> plugin. Note: until Kepler, using SVG figures required the GMF Tooling Experimental SDK (available from <a href="http://download.eclipse.org/modeling/gmp/gmf-tooling/updates/releases/">this update site</a>). Remember to add the <code>.svg</code> file to the binary builds of your plugin.</li>
<li><code>tool.description</code> (optional) : the description of the creation tool.</li>
<li><code>tool.large.bundle</code> (optional) : the bundle of the large icon of the creation tool.</li>
<li><code>tool.large.path</code> (optional) : the path of the large icon of the creation tool.</li>
<li><code>tool.name</code> (optional) : the name of the creation tool.</li>
<li><code>tool.small.bundle</code> (optional) : the bundle of the small icon of the creation tool.</li>
<li><code>tool.small.path</code> (optional) : the path of the small icon of the creation tool.</li>
</ul>
<h3 id="gmflink">gmf.link<a class="headerlink" href="#gmflink" title="Permanent link">&para;</a></h3>
<p>Applies to <code>EClass</code>es that should appear on the diagram as links and to non-containment <code>EReference</code>s.</p>
<h3 id="gmflink-for-eclass">gmf.link (for EClass)<a class="headerlink" href="#gmflink-for-eclass" title="Permanent link">&para;</a></h3>
<p>It accepts the following details:</p>
<ul>
<li><code>color</code> (optional) : the RGB color of the link.</li>
<li><code>incoming</code> (optional) : Boolean value which specifies whether the generated editor should allow links to be created from target to source. Defaults to <code>false</code>.</li>
<li><code>label</code> (optional) : the names of the <code>EAttribute</code>s of the <code>EClass</code> the value of which will be displayed as the label of the link.</li>
<li><code>label.parser</code> (optional) : indicates the unqualified name of the class that will parse the text entered by the user into the label. By default, a <a href="http://download.oracle.com/javase/6/docs/api/java/text/MessageFormat.html">MessageFormat</a>-based parser is generated, but it can be manually customized after generation.</li>
</ul>
<!--* `label.text` (optional) : defines the default text to be used when the `EAttribute`(s) in `label` are not set. By default, it is set to the name of the `EClass`.-->
<ul>
<li><code>source</code> : the source non-containment <code>EReference</code> of the link.</li>
<li><code>source.constraint</code> (optional) : OCL assertion that should be checked by the graphical editor when creating a link. For instance, <code>self &lt;&gt; oppositeEnd</code> would forbid users for creating a link from a node to itself (a self-loop): <code>self</code> is the source of the link, and <code>oppositeEnd</code> is the target of the link.</li>
<li><code>source.decoration</code> (optional) : the decoration of the source end of the link. Can be set to <code>none</code>, <code>arrow</code>, <code>rhomb</code>, <code>filledrhomb</code>, <code>square</code>, <code>filledsquare</code>, <code>closedarrow</code>, <code>filledclosedarrow</code>, or the fully qualified name of a Java class that implements the <code>org.eclipse.draw2d.RotatableDecoration</code> interface</li>
<li><code>style</code> (optional) : the style of the link (see <code>border.style</code> above).</li>
<li><code>target</code> : the target non-containment <code>EReference</code> of the link.</li>
<li><code>target.constraint</code> (optional) : OCL assertion that should be checked by the graphical editor when creating a link. For instance, <code>self &lt;&gt; oppositeEnd</code> would forbid users for creating a link from a node to itself (a self-loop): <code>self</code> is the target of the link, and <code>oppositeEnd</code> is the source of the link.</li>
<li><code>target.decoration</code> (optional) : See <code>source.decoration</code>.</li>
<li><code>tool.description</code> (optional) : the description of the creation tool.</li>
<li><code>tool.large.bundle</code> (optional) : the bundle of the large icon of the creation tool.</li>
<li><code>tool.large.path</code> (optional) : the path of the large icon of the creation tool.</li>
<li><code>tool.name</code> (optional) : the name of the creation tool.</li>
<li><code>tool.small.bundle</code> (optional) : the bundle of the small icon of the creation tool.</li>
<li><code>tool.small.path</code> (optional) : the path of the small icon of the creation tool.</li>
<li><code>width</code> (optional) : the width of the link.</li>
</ul>
<p>For an example see the <code>Sync</code> class in the <code>filesystem</code> metamodel</p>
<h3 id="gmflink-for-non-containment-ereference">gmf.link (for non-containment EReference)<a class="headerlink" href="#gmflink-for-non-containment-ereference" title="Permanent link">&para;</a></h3>
<p>It accepts the following details:</p>
<ul>
<li><code>color</code> (optional) : the RGB color of the link</li>
<li><code>label</code> (optional) : The static text that will be displayed as the label of the link. If no label is specified, the name of the reference is displayed instead.</li>
<li><code>label.text</code> (optional) : equivalent to <code>label</code> in this case.</li>
<li><code>source.decoration</code> (optional) : The decoration of the source end of the link. Can be set to <code>none</code>, <code>arrow</code>, <code>rhomb</code>, <code>filledrhomb</code>, <code>square</code>, <code>filledsquare</code>, <code>closedarrow</code>, <code>filledclosedarrow</code>, or the fully qualified name of a Java class that implements an appropriate interface</li>
<li><code>style</code> (optional) : the style of the link (see <code>border.style</code> above)</li>
<li><code>target.decoration</code> (optional) : As above.</li>
<li><code>tool.description</code> (optional) : the description of the creation tool</li>
<li><code>tool.large.bundle</code> (optional) : The bundle of the large icon of the creation tool</li>
<li><code>tool.large.path</code> (optional) : The path of the large icon of the creation tool</li>
<li><code>tool.name</code> (optional) : the name of the creation tool</li>
<li><code>tool.small.bundle</code> (optional) : The bundle of the small icon of the creation tool</li>
<li><code>tool.small.path</code> (optional) : The path of the small icon of the creation tool</li>
<li><code>width</code> (optional) : the width of the link</li>
</ul>
<h3 id="gmfcompartment-for-containment-ereference">gmf.compartment (for containment EReference)<a class="headerlink" href="#gmfcompartment-for-containment-ereference" title="Permanent link">&para;</a></h3>
<p>Defines that the containment reference will create a compartment where model elements that conform to the type of the reference can be placed. It accepts the following details:</p>
<ul>
<li><code>collapsible</code> (optional) : Set to <code>false</code> to prevent the compartment from collapsing (default is <code>true</code>)</li>
<li><code>layout</code> (optional) : The layout of the compartment. Can be set to free (default) or list</li>
</ul>
<h3 id="gmfaffixed-for-containment-ereference">gmf.affixed (for containment EReference)<a class="headerlink" href="#gmfaffixed-for-containment-ereference" title="Permanent link">&para;</a></h3>
<p>Defines that the containment reference will create nodes which are affixed to the edges of the containing node. <a href="../articles/eugenia-affixed-nodes">See an example</a>.</p>
<h3 id="gmflabel-for-eattribute">gmf.label (for EAttribute)<a class="headerlink" href="#gmflabel-for-eattribute" title="Permanent link">&para;</a></h3>
<p>Defines additional labels for the containing <code>EClass</code>. These labels will be displayed underneath the default label for the containing <code>EClass</code>. It accepts the following details:</p>
<ul>
<li><code>label.edit.pattern</code> (optional) : like <code>label.pattern</code>, but only for editing the label.</li>
<li><code>label.parser</code> (optional) : indicates the unqualified name of the class that will parse the text entered by the user into the label. By default, a <a href="http://download.oracle.com/javase/6/docs/api/java/text/MessageFormat.html">MessageFormat</a>-based parser is generated, but it can be manually customized after generation.</li>
<li><code>label.pattern</code> (optional) : if more than one attributes are specified in the label, the format detail is necessary to show how their values will be rendered in the label. The format follows the Java Message Format style (e.g. <code>{0} : {1}</code>). The same pattern is used for editing and viewing the label.</li>
<li><code>label.readOnly</code> (optional) : A value of <code>true</code> denotes that the label cannot be changed in the generated diagram editor.</li>
<li><code>label.text</code> (optional) : defines the default text to be used when the attribute is not set.</li>
<li><code>label.view.pattern</code> (optional) : like <code>label.pattern</code>, but only for viewing the label.</li>
</ul>
<h2 id="installing-eugenia">Installing Eugenia<a class="headerlink" href="#installing-eugenia" title="Permanent link">&para;</a></h2>
<p>Eugenia is a part of the main Epsilon distribution, available from its <a href="http://download.eclipse.org/epsilon/updates">update site</a>.
Detailed <a href="http://www.eclipse.org/gmt/epsilon/download">installation instructions</a> are available.</p>
<p>Although not necessary, the Emfatic toolkit mentioned above is heavily recommended: install it from its <a href="http://download.eclipse.org/emfatic/update/">update site</a>.</p>
<h2 id="running-eugenia">Running Eugenia<a class="headerlink" href="#running-eugenia" title="Permanent link">&para;</a></h2>
<p>To run Eugenia you need to do the following:</p>
<ul>
<li>Create a new general project</li>
<li>Create and annotate your Emfatic (or Ecore) metamodel in the root of your project</li>
<li>Right-click your Emfatic (or Ecore) metamodel and select <code>Eugenia</code> &rarr; <code>Generate GMF editor</code></li>
<li>Launch a new Eclipse instance from the <code>Run</code> &rarr; <code>Eclipse Application</code> right-click menu of the project that contains your metamodel</li>
<li>In the new Eclipse instance create a new <code>General</code> &rarr; <code>Project</code> and in it create a new <code>Filesystem diagram</code> through the <code>File</code> &rarr; <code>New</code> &rarr; <code>Other...</code> dialog</li>
</ul>
<h2 id="re-running-eugenia">Re-running Eugenia<a class="headerlink" href="#re-running-eugenia" title="Permanent link">&para;</a></h2>
<p>If you now change your metamodel you'll have to rerun Eugenia to generate your updated editor:</p>
<ul>
<li>Right-click your Ecore metamodel (or Emfatic file) and select <code>Eugenia</code> &rarr; <code>Generate GMF editor</code></li>
<li>Run a new instance of Eclipse</li>
</ul>
<p>(Please note that any changes you have made manually to the editor's <code>.gmfgraph</code>, <code>.gmftool</code> and <code>.gmfmap</code> models will be <strong>overwritten</strong>. Have a look <a href="../articles/eugenia-polishing">here</a> for an alternative way to customize these models)</p>
<h2 id="troubleshooting">Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permanent link">&para;</a></h2>
<ul>
<li>Certain versions of Emfatic do not support annotations without details (e.g. <code>@gmf</code> or <code>@gmf.diagram</code>). You can use dummy details as a workaround (e.g. <code>@gmf(foo="bar")</code>)</li>
<li>Should you run across the "Node is referenced from multiple containers with different 'List Layout' values" message during validation please ignore it and proceed with the editor code generation.</li>
<li>Eugenia does not work with Ecore metamodels that span across multiple files/sub-packages</li>
<li>Ensure that the name of your package is different to the names of the classes it contains (i.e. a package Foo should not contain a Foo class)</li>
</ul>
<h2 id="recipes">Recipes<a class="headerlink" href="#recipes" title="Permanent link">&para;</a></h2>
<ul>
<li><a href="../articles/eugenia-nodes-with-images">Nodes with user defined images</a> (e.g. jpg, png, gif)</li>
<li><a href="../articles/eugenia-nodes-with-runtime-images">Nodes with user defined images at runtime</a></li>
</ul>
<h2 id="customizing-your-editor">Customizing your editor<a class="headerlink" href="#customizing-your-editor" title="Permanent link">&para;</a></h2>
<p><a href="../articles/eugenia-polishing">Click here</a> to find out how you can further customize the generated <code>.gmfgraph</code>, <code>.gmfmap</code> and <code>.gmftool</code> models in ways that are not supported by the annotations provided by Eugenia, and still preserve the customizations when Eugenia is re-invoked.</p>
<h2 id="adding-copyright">Adding Copyright<a class="headerlink" href="#adding-copyright" title="Permanent link">&para;</a></h2>
<p>To add copyright information to your generated .gmfgen model, simply create a file named copyright.txt next to it. Next time you invoke <code>Eugenia</code> &rarr; <code>Synchronize GMF gen model</code>, Eugenia will pick it up and place its contents in the root GenDiagramEditor of your .gmfgen model. If you have added the copyright.txt file, you can also inject its contents to your .genmodel model (EMF generator model) by right-clicking it and invoking <code>Eugenia</code> &rarr; <code>Synchronize EMF gen model</code>.</p>
<h2 id="next-steps">Next Steps<a class="headerlink" href="#next-steps" title="Permanent link">&para;</a></h2>
<p>Now that you've learned how to generate a GMF-based editor using Eugenia, you may also want to add some constraints to your editor, which you can then evaluate (explicitly or on-save) to <a href="../articles/evl-gmf-integration">check the correctness/consistency of your models</a>:</p>
<p><img alt="" src="Filesystemwitherrorshighlighted.png" /></p>





                
              </article>
            </div>
          
          
  <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var tab,labels=set.querySelector(".tabbed-labels");for(tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>

        </div>
        
      </main>
      
        <footer class="md-footer">
  
    
      
      <nav class="md-footer__inner md-grid" aria-label="Footer" >
        
          
          <a href="../flexmi/" class="md-footer__link md-footer__link--prev" aria-label="Previous: Flexmi" rel="prev">
            <div class="md-footer__button md-icon">
              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
            </div>
            <div class="md-footer__title">
              <span class="md-footer__direction">
                Previous
              </span>
              <div class="md-ellipsis">
                Flexmi
              </div>
            </div>
          </a>
        
        
          
          <a href="../exeed/" class="md-footer__link md-footer__link--next" aria-label="Next: Exeed" rel="next">
            <div class="md-footer__title">
              <span class="md-footer__direction">
                Next
              </span>
              <div class="md-ellipsis">
                Exeed
              </div>
            </div>
            <div class="md-footer__button md-icon">
              <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg>
            </div>
          </a>
        
      </nav>
    
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-copyright">
  
    <div class="md-copyright__highlight">
      Copyright © <a href="https://www.eclipse.org">Eclipse Foundation, Inc.</a> All Rights Reserved <br/> <a href="https://www.eclipse.org/legal/privacy.php">Privacy Policy</a> &centerdot; <a href="https://www.eclipse.org/legal/termsofuse.php">Terms of Use</a> &centerdot; <a href="https://www.eclipse.org/legal/copyright.php">Copyright Agent</a>  &centerdot; <a href="https://www.eclipse.org/legal/">Legal</a><p><img src="https://eclipse.dev/epsilon/assets/images/eclipse-foundation-logo.svg"/></p>
    </div>
  
  
    Made with
    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
      Material for MkDocs
    </a>
  
</div>
      
        <div class="md-social">
  
    
    
    
    
      
      
    
    <a href="https://twitter.com/eclipseepsilon" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg>
    </a>
  
    
    
    
    
      
      
    
    <a href="https://youtube.com/epsilondevs" target="_blank" rel="noopener" title="youtube.com" class="md-social__link">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z"/></svg>
    </a>
  
</div>
      
    </div>
  </div>
</footer>
      
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>
    
    <script id="__config" type="application/json">{"base": "../..", "features": ["content.code.copy", "content.tabs.link", "navigation.footer"], "search": "../../assets/javascripts/workers/search.74e28a9f.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
    
    
      <script src="../../assets/javascripts/bundle.220ee61c.min.js"></script>
      
        
          <script src="https://unpkg.com/mermaid@8.5.1/dist/mermaid.min.js"></script>
        
      
        
          <script src="../../assets/javascript/mermaid.js"></script>
        
      
        
          <script src="../../assets/javascript/jquery.js"></script>
        
      
        
          <script src="../../assets/javascript/slick.min.js"></script>
        
      
        
          <script src="../../assets/javascript/google-code-prettify/prettify.js"></script>
        
      
        
          <script src="../../assets/javascript/google-code-prettify/lang-emfatic.js"></script>
        
      
        
          <script src="../../assets/javascript/google-code-prettify/lang-epsilon.js"></script>
        
      
        
          <script src="../../assets/javascript/google-code-prettify/prettyprint.js"></script>
        
      
        
          <script src="../../assets/javascript/extra.js"></script>
        
      
        
          <script src="https://w.appzi.io/w.js?token=jlv6W"></script>
        
      
    
  </body>
</html>